package com.controller;

import com.context.AppContext;
import com.model.domain.persona.Hogar;
import com.model.domain.persona.HogarXmlTransferido;
import com.model.domain.proceso.envio.subida.LogXmlTransferido;
import com.model.domain.ubicacion.ViviendaXmlTransferido;
import com.model.domain.usuario.EstadoUsuario;
import com.model.domain.usuario.Usuario;
import com.model.domain.usuario.opciones.OpcionTransferenciaEnvio;
import com.model.domain.usuario.opciones.OpcionTransferenciaMonitoreo;
import com.model.service.AbstractDataXmlService;
import com.model.service.DataXmlCampoService;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.log.MiLogger;

public class DataXmlCampoController 
extends AbstractDataXmlController
{

    private MonitoreoTransferenciaController monitoreoTransferenciaController;
    
  
    
       
    @Override
    public void upload_cargar(HttpServletRequest request, HttpServletResponse response) throws Exception { 
        this.getUsuarioController().verificarPermiso(OpcionTransferenciaEnvio.SUBIR_XML_CAMPO_CARGAR_SIN_CONTROL,request);
        
        MiLogger logger = MiLogger.getLogger(response,AppContext.getInstancia().getLoggerContext().getLoggerErrores());
        List<LogXmlTransferido> archivos = proceso1_subirDataXml(logger,request,response);
        proceso2_cargarDataXml(logger,request,response, archivos, false);//cargar sin control de envio
    }

    @Override
    public void menuSubirXml(HttpServletRequest request, HttpServletResponse response)throws Exception {
        super.menuSubirXml(request, response);
        request.getRequestDispatcher("pagweb/transferencia/envios/cargardataxml_campo.jsp").forward(request, response);
    }    
    
    public void forzarCargaAutomatica(HttpServletRequest request, HttpServletResponse response) throws Exception {
        this.getUsuarioController().verificarPermiso(OpcionTransferenciaEnvio.INFORMACION_CARGA,request);
        
        AbstractDataXmlService service = (AbstractDataXmlService) this.getService();
        Usuario uServidor = this.getUsuarioController().getUsuarioEnSesionDelServidor(request);  
        
        MiLogger lg = MiLogger.getLogger(response,AppContext.getInstancia().getLoggerContext().getLoggerErrores());
        
        EstadoUsuario estado = uServidor.getEstado();
        
        if(estado==EstadoUsuario.SIN_ACTIVIDAD) {
            try {
                uServidor.setEstado(EstadoUsuario.CARGANDO_XML);
                
                service.cargarDataXML_Automatica(lg,uServidor.getIdentificador());
            }
            finally {
                uServidor.setEstado(EstadoUsuario.SIN_ACTIVIDAD);               
            }
        }
        else {                
            response.getWriter().append("Ud inició anteriormente la operación "+estado+". Espere a que termine esta operación.");
        }
    }
    
    public void cargaManualDeRecuperacionEnvios(HttpServletRequest request, HttpServletResponse response) throws Exception {
        this.getUsuarioController().verificarPermiso(OpcionTransferenciaMonitoreo.RECUPERACION_ENVIOS,request);
        
        Usuario uServidor = this.getUsuarioController().getUsuarioEnSesionDelServidor(request);        
        EstadoUsuario estado = uServidor.getEstado();
        
        if(estado==EstadoUsuario.SIN_ACTIVIDAD) { 
            try {
                uServidor.setEstado(EstadoUsuario.CARGA_MANUAL_XML);
                DataXmlCampoService service = (DataXmlCampoService)this.getService();
                MiLogger logger = MiLogger.getLogger(response,AppContext.getInstancia().getLoggerContext().getLoggerErrores());

                LogXmlTransferido logxml = new LogXmlTransferido();
                Integer id_envio = Integer.parseInt( request.getParameter("id_envio") );
                logxml.setId(id_envio);     

                ViviendaXmlTransferido vxml = new ViviendaXmlTransferido();
                vxml.setLogXmlTransferido(logxml);

                Hogar h = new Hogar();        
                h.setCodigo(request.getParameter("hogar"));

                HogarXmlTransferido hxml = new HogarXmlTransferido();
                hxml.setHogar(h);
                hxml.setViviendaXmlTransferido(vxml);

                service.cargarDataXML_ManualDeRecuperacionEnvios(logger,hxml,uServidor.getIdentificador());
                
                //Muestra el reporte luego de la actualizacion
                monitoreoTransferenciaController.buscarRecuperacionEnvios(request, response);
            }
            finally {
                uServidor.setEstado(EstadoUsuario.SIN_ACTIVIDAD);
            }
        }
        else if(estado==EstadoUsuario.CARGA_MANUAL_XML) {                
            response.getWriter().append("Actualmente se está CARGANDO un archivo a la BD. Espere a que termine esta operación.");            
        }
        
    }   
    
    public void menuSubirCargarXml(HttpServletRequest request, HttpServletResponse response)throws Exception {
        super.menuSubirXml(request, response);
        request.getRequestDispatcher("pagweb/transferencia/envios/cargardataxml_campo_administrador.jsp").forward(request, response);
    }
    
    public void menuInformacionCarga(HttpServletRequest request, HttpServletResponse response)throws Exception {
        super.menuSubirXml(request, response);
        request.getRequestDispatcher("pagweb/transferencia/envios/informacionCarga.jsp").forward(request, response);
    }   

    /////////////////////
    
    public MonitoreoTransferenciaController getMonitoreoTransferenciaController() {
        return monitoreoTransferenciaController;
    }

    public void setMonitoreoTransferenciaController(MonitoreoTransferenciaController monitoreoTransferenciaController) {
        this.monitoreoTransferenciaController = monitoreoTransferenciaController;
    }
       
    
}

